package com.xuecheng.media.service;

import com.xuecheng.base.model.PageParams;
import com.xuecheng.base.model.PageResult;
import com.xuecheng.media.model.dto.QueryMediaParamsDto;
import com.xuecheng.media.model.dto.UploadFileParamsDto;
import com.xuecheng.media.model.dto.UploadFileResultDto;
import com.xuecheng.media.model.po.MediaFiles;
import com.xuecheng.media.model.po.RestResponse;

import java.io.File;

/**
 * @description 媒资文件管理业务类
 * @author Mr.M
 * @date 2022/9/10 8:55
 * @version 1.0
 */
public interface MediaFileService {

 /**
  * @description 媒资文件查询方法
  * @param pageParams 分页参数
  * @param queryMediaParamsDto 查询条件
  * @return com.xuecheng.base.model.PageResult<com.xuecheng.media.model.po.MediaFiles>
  * @author Mr.M
  * @date 2022/9/10 8:57
 */
 public PageResult<MediaFiles> queryMediaFiels(Long companyId,PageParams pageParams, QueryMediaParamsDto queryMediaParamsDto);

 /**
  * 上传文件
  *
  * @param companyId           机构id
  * @param uploadFileParamsDto 上传文件信息
  * @param localFilePath       文件磁盘路径
  * @param objectName
  * @return 文件信息
  */
 public UploadFileResultDto uploadFile(Long companyId, UploadFileParamsDto uploadFileParamsDto,String localFilePath,String objectName);
 public MediaFiles addMeaiaFilesToDb(Long companyId, String fileMd5, UploadFileParamsDto uploadFileParamsDto, String objectName, String bucket_mediafiles);

 /**
  * 检查文件
  * @param fileMd5
  * @return
  */
 RestResponse<Boolean> checkFile(String fileMd5);

 /**
  * 检查分块
  * @param fileMd5
  * @param chunkindex 分块序号
  * @return
  */
 RestResponse<Boolean> checkchunk(String fileMd5, int chunkindex);

 /**
  * 上传分块
  * @param absolutePath
  * @param chunk
  * @param fileMd5
  * @return
  */
 RestResponse uploadChunk(String absolutePath, int chunk, String fileMd5);


 /**
  * 合并分块
  * @param companyId
  * @param fileMd5
  * @param chunkTotal
  * @param uploadFileParamsDto
  * @return
  */
 RestResponse mergechunks(Long companyId, String fileMd5, int chunkTotal, UploadFileParamsDto uploadFileParamsDto);


 /**
  * 根据media_files表的id查找
  * @param mediaId
  * @return
  */
 MediaFiles getFileById(String mediaId);

 /**
  * 下载文件到本地
  * @param bucketVideo
  * @param mergeFilePath
  * @return
  */
 public File downloadFileFromMinIO(String bucketVideo, String mergeFilePath);

 /**
  * 添加文件到minio
  * @param localFilePath
  * @param mimeType
  * @param bucket
  * @param objectName
  * @return
  */
 public boolean addMediaFilesToMinIO(String localFilePath, String mimeType, String bucket, String objectName);
}
